#include "Game.h"
#include "QuestManager.h"
#include "external/tinyxml.h"
#include "NPC.h"

#define RUTA_QUESTS "data/quests/"

QuestManager::QuestManager( std::string & quests )
	{
		loadQuests(quests);
		G_EVENTOS->addListener(NPC_CLICKED,this);
		G_EVENTOS->addListener(QUEST_ACEPTADA,this);

	}


void QuestManager::loadQuests( std::string & quests )
	{
	std::string rutaFichero = RUTA_QUESTS + quests;
	TiXmlDocument doc(rutaFichero.c_str());

	if (!doc.LoadFile())
		g->alertaError(std::string("No se ha podido cargar el fichero de misiones"));

	TiXmlElement *quest = doc.FirstChildElement("QUESTS")->FirstChildElement("quest");

	while(quest){
		misiones.push_back(new Quest(quest));
		quest = quest->NextSiblingElement("quest");
		}
	}

bool QuestManager::onEvent( Event *e )
	{
		//comprobamos que hay alguna quest en la lista no cargados de ese actor.

		if (e->tipo == NPC_CLICKED){
			eventoNPCclicked *data = (eventoNPCclicked*)e->datos;
			NPC *npc = dynamic_cast<NPC*>(data->actor);
			Quest *encontrada = buscarPorAutor(npc->getNombre());
			if (encontrada != NULL){
					//avisamos al GUI.
				std::cout << "La mision \'" << encontrada->getNombre() << "\' pertenece a : " << npc->getNombre() << std::endl;
//				g->getGUI()->mostrarQuest(encontrada);
			}

			//buscamos una quest con su nombre;
		}else if (e->tipo == QUEST_ACEPTADA){
			eventoQuestAceptada *dataQuest = (eventoQuestAceptada*)e->datos;
			Quest *aceptada = static_cast<Quest*>(dataQuest->qt);

			misiones.remove(aceptada);			
			misionesActivas.push_back(aceptada);

			aceptada->setState(QUESTSTATE::ACTIVADA);

		}



		return false;
	}


Quest * QuestManager::buscarPorAutor( std::string &autor )
	{
		std::list<Quest*>::iterator it;
		for (it = misiones.begin(); it != misiones.end(); ++it){
			Quest *q = *it;
			if (q->getDueno().compare(autor))
				return q;
		}
			
		return NULL;
	}

QuestManager::~QuestManager(void)
	{
	}
